﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades;
using System.Data;

namespace AccesoADatos
{
    public class UsuarioDAO
    {
        public static SqlConnection conexion = AccesoBD.getConexion();

        public static bool UsuarioSave(Usuario usu)
        {

            conexion.Open();
            string query1 = "INSERT INTO USUARIO (nombre, apellido, email, user_name, pass, id_permiso, id_estado_usuario) ";
            query1 += "VALUES (@nombre, @apellido, @email, @user_name, @pass, @id_permiso, @id_estado_usuario) ";


            SqlCommand cmd = new SqlCommand(query1, conexion);

            cmd.Parameters.AddWithValue("nombre", usu.Nombre);
            cmd.Parameters.AddWithValue("apellido", usu.Apellido);
            cmd.Parameters.AddWithValue("email", usu.Email);
            cmd.Parameters.AddWithValue("user_name", usu.UserName);
            cmd.Parameters.AddWithValue("pass", usu.Pass);
            cmd.Parameters.AddWithValue("id_permiso", 2);
            cmd.Parameters.AddWithValue("id_estado_usuario", 2);

            try
            {
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
                throw;
            }
            finally { conexion.Close(); }



        }
        public bool ObtenerUsuario(string email, string usuario)
        {
            bool aux = false;

            conexion.Open();
            string query1 = "select user_name, email from USUARIO where user_name = @paramUser and email = @paramEmail";
            SqlCommand cmd = new SqlCommand(query1, conexion);

            cmd.Parameters.AddWithValue("@paramUser", usuario);
            cmd.Parameters.AddWithValue("@paramEmail", email);
            SqlDataReader dr = cmd.ExecuteReader();
            aux = dr.Read();
            
            conexion.Close();
            return aux;
        }

        public static bool modificarPermiso(int estado, int permiso, int id)
        {
            conexion.Open();
            string query1 = "UPDATE USUARIO SET ";

            query1 += "id_estado_usuario = @idEstadoUsuario ";
            query1 += ", id_permiso  = @idPermiso ";
            query1 += "WHERE id_usuario = @idUsuario";

            SqlCommand cmd = new SqlCommand(query1, conexion);
            cmd.Parameters.AddWithValue("@idEstadoUsuario", estado);
            cmd.Parameters.AddWithValue("@idPermiso", permiso);
            cmd.Parameters.AddWithValue("@idUsuario", id);

            try
            {
                cmd.ExecuteNonQuery();
                return true;

            }
            catch (Exception)
            {

                return false;
                
                throw;
            }
           
 
        }

        public static List<Usuario> getUsuariosPendientes()
        {
            List<Usuario> listUsuario = new List<Usuario>();
            conexion.Close();
            conexion.Open();

            string query = "SELECT u.id_usuario, u.nombre, u.apellido, u.user_name, u.pass, u.email, p.descripcion, e.descripcion as 'desc' FROM ESTADO_USUARIO e,USUARIO u, PERMISOS p WHERE u.id_estado_usuario=e.id_estado_usuario and u.id_permiso=p.id_permiso and e.descripcion='DESHABILITADO'";
            SqlCommand cmd = new SqlCommand(query, conexion);
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {

                Usuario usu = new Usuario();
                usu.idUsuario = Convert.ToInt32(dr["id_usuario"].ToString());
                usu.Nombre = dr["nombre"].ToString();
                usu.Apellido = dr["apellido"].ToString();
                usu.Email = dr["email"].ToString();
                usu.UserName = dr["user_name"].ToString();
                usu.Pass = dr["pass"].ToString();
                usu.Permiso = dr["descripcion"].ToString();
                usu.Estado = dr["desc"].ToString();
                
                listUsuario.Add(usu);
            }
            conexion.Close();
            return listUsuario;
        }

        public static Usuario getUsuarioId(int id)
        {
            Usuario usu = null;
            conexion.Open();

            string query = "SELECT * FROM dbo.Usuario o ";
            query += " WHERE o.id_usuario = @idUsuario";

            SqlCommand cmd = new SqlCommand(query, conexion);
            cmd.Parameters.AddWithValue("idUsuario", id);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {

                usu = new Usuario();
                usu.idUsuario = Convert.ToInt32(dr["id_usuario"].ToString());
                usu.Nombre = dr["nombre"].ToString();
                usu.Apellido = dr["apellido"].ToString();
                usu.UserName = dr["user_name"].ToString();
                usu.Pass = dr["pass"].ToString();
                
                

            }
            conexion.Close();
            return usu;
        }
    }
}
